#pragma once

#include "ddclconfig.h"

typedef struct tag_ddcl_Md5Ctx{
    dduint32 count[2];
    dduint32 state[4];
    dduint8 buffer[64];
}ddcl_Md5Ctx;

#define DDCL_MD5_DIGEST_SIZE 16
#define DDCL_MD5_STRING_SIZE 33

DDCLAPI void
ddcl_init_md5 (ddcl_Md5Ctx * ctx);

DDCLAPI void
ddcl_update_md5 (ddcl_Md5Ctx * ctx,
        const dduint8 * input, dduint32 size);

DDCLAPI void
ddcl_final_md5(ddcl_Md5Ctx * ctx,
        dduint8 digest[DDCL_MD5_DIGEST_SIZE]);

DDCLAPI void
ddcl_tostring_md5(const dduint8 digest[DDCL_MD5_DIGEST_SIZE],
        dduint8 str[DDCL_MD5_STRING_SIZE]);
